package com.ssm.web.controller;

import com.ssm.core.cache.CacheService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class CacheController {
    @Autowired
    private CacheService cacheService;

    /**
     * 将方法的运行结果进行缓存，以后要是再有相同的数据，直接从缓存中获取，不用调用方法
     * CacheManager中管理多个Cache组件，对缓存的真正CRUD操作在Cache组件中，每个缓存组件都有自己的唯一名字；
     * <p>
     * 属性：
     * CacheName/value:指定存储缓存组件的名字
     * key:缓存数据使用的 key,可以使用它来指定。默认是使用方法参数的值，1-方法的返回值
     * 编写Spel表达式：#id 参数id的值， #a0/#p0 #root.args[0]
     * keyGenerator:key的生成器，自己可以指定key的生成器的组件id
     * key/keyGendertor二选一使用
     * <p>
     * cacheManager指定Cache管理器，或者cacheReslover指定获取解析器
     * condition:指定符合条件的情况下，才缓存；
     * unless：否定缓存，unless指定的条件为true，方法的返回值就不会被缓存，可以获取到结果进行判断
     * sync:是否使用异步模式，unless不支持
     */
    @Cacheable("num")
    @ResponseBody
    @GetMapping("num")
    public Integer num() {
        return cacheService.getNum();
    }
}